package tas.cbo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import tas.sql.ConectaDb;

public class Combos {

    public Combos() {
    }

    public List<Object[]> documentosTipos() {
        String sql = "SELECT IDTIPODOCUMENTO,DESCRIPCIONTIPODOCUMENTO "
                + "FROM BDTAS.TIPODOCUMENTO";

        List<Object[]> list = combo(sql);
        return list;
    }

    public List<Object[]> sexo() {
        String sql = "SELECT 'M' CODIGO, 'Masculino' DESCRIPCION FROM dual " 
                + " UNION "
                + "SELECT 'F' CODIGO, 'Femenino' DESCRIPCION FROM dual ";

        List<Object[]> list = comboAdminpjSTR(sql);
        return list;
    }

    
    // combos de adminpj
    public List<Object[]> annio() {
        String sql = "SELECT DISTINCT "
                + "UNIEJE.IDAÑO,"
                + "UNIEJE.IDAÑO "
                + "FROM ADMINPJ.V_PER_CTL_UNIDEJE UNIEJE "
                + "WHERE UNIEJE.ESTADOUE='1'";

        List<Object[]> list = comboAdminpj(sql);
        return list;
    }

    public List<Object[]> unidadEjecutora(Integer idusuario, String anno) {

        String filtro = "";

        String sql = "SELECT "
                + "UNIDEJE.IDUNIDADEJECUTORACORE,"
                + "UNIDEJE.DESCRIPCIONUE "
                + "FROM ADMINPJ.V_PER_CTL_UNIDEJE UNIDEJE "
                + "WHERE UNIDEJE.ESTADOUE='1' "
                + "AND UNIDEJE.IDAÑO='" + anno + "' "
                + filtro 
                + " ORDER BY 2 ASC";

        List<Object[]> list = comboAdminpjSTR(sql);
        return list;
    }

    public List<Object[]> corte(String idunidadejecutora, Integer idusuario, String annio) {

        String filtro = "";

        String sql = "SELECT "
                + "CORTE.IDCORTECORE,"
                + "CORTE.DESCRIPCIONCORTE "
                + "FROM ADMINPJ.V_PET_CTL_CORTE CORTE "
                + "WHERE CORTE.ESTADOCORTE ='1' "
                + "AND CORTE.IDAÑO='" + annio + "' "
                + "AND IDUNIDADEJECUTORA='" + idunidadejecutora + "' "
                + filtro
                + " ORDER BY 2 ASC";

        List<Object[]> list = comboAdminpjSTR(sql);
        return list;
    }

    public List<Object[]> sede(Integer idcorte, Integer idusuario, Integer idunidadejecutora, String annio) {
        String filtro = "";

        String sql = "SELECT "
                + "SEDE.IDCSEDECORE,"
                + "SEDE.DESCRIPCIONSEDE "
                + "FROM ADMINPJ.V_PER_CTL_SEDES SEDE "
                + "WHERE SEDE.ESTADOSEDE  ='1' "
                + "AND  SEDE.IDAÑO ='" + annio + "' "
                + "AND  SEDE.IDUNIDADEJECUTORA='" + idunidadejecutora + "' "
                + "AND  SEDE.IDCORTE='" + idcorte + "' "
                + filtro
                + " ORDER BY 2 ASC";

        List<Object[]> list = comboAdminpjSTR(sql);
        return list;
    }
    
        public List<Object[]> dependencia(String idcorte, Integer idusuario, String idunidadejecutora, String annio) {
        String filtro = "";

        String sql = "SELECT DEP.IDDEPENDENCIACORE CODIGO,"
                + "DEP.DESCRIPCIONDEPENDENCIA DESCRIPCIONDEPENDENCIA "
                + "FROM ADMINPJ.V_PER_DEPENDENCIAS DEP "
                + "WHERE DEP.ESTADODEPENDENCIA  ='1' "
                + "AND  DEP.IDAÑO ='" + annio + "' "
                + "AND  DEP.IDUNIDADEJECUTORA='"  + idunidadejecutora + "' "
                + "AND  DEP.IDCORTE='"  + idcorte + "' "
                + filtro
                + " ORDER BY 2 ASC";
       
        List<Object[]> list = comboAdminpjSTR(sql);
        return list;
    }
    
     public List<Object[]> area(String idcorte, Integer idusuario, String idunidadejecutora, String annio, String iddependencia) {
        String filtro = "";

        String sql = "SELECT  AREA.CODAREAINT CODIGO, "
                + "AREA.DESCRIPCIONAREAS DESCRIPCION "
                + "FROM ADMINPJ.V_PER_AREASPJ AREA "
                + "WHERE  AREA.ESTADOAREA=1 "
                + "AND  AREA.IDAÑO ='" + annio + "' "
                + "AND  AREA.IDUNIDADEJECUTORA='"  + idunidadejecutora + "' "
                + "AND  AREA.IDCORTE='"  + idcorte + "' "
                + "AND  AREA.IDDEPENDENCIACORE='"  + iddependencia + "' "                
                + filtro
                + " ORDER BY 2 ASC";
       
        List<Object[]> list = comboAdminpjSTR(sql);
        return list;
    }
        
    public List<Object[]> regLabCbo() {
        String sql = "SELECT "
                + "REGLAB.IDREGIMENLABORALCORE CODIGO,"
                + "REGLAB.DESCRIPCIONREGIMENLABORAL DESCRIPCION "
                + "FROM ADMINPJ.V_PET_CTL_REG_LABORAL REGLAB "
                + "WHERE REGLAB.ESTADOREGIMENLABORAL = '1'"
                + " ORDER BY 2 ASC";
        
        List<Object[]> list = comboAdminpjSTR(sql);
        return list;
    }
    
      public List<Object[]> estado() {

      
        String sql = "SELECT IDESTADO, DESCRIPCIONESTADO FROM BDTAS.ESTADO ORDER BY 2";
           

        List<Object[]> list = combo(sql);
        return list;
    }
      
    // combos de bdtas
    public List<Object[]> turnosCbo(String año, String uejecutora, String corte) {
        String sql = "SELECT "
                + " IDTURNO,"
                + " DESCRIPCIONTURNO || '(' || TO_CHAR(HORAINGRESO, 'HH24:MI' ) || '-'|| TO_CHAR(HORASALIDA, 'HH24:MI' ) ||')'"
                + " FROM BDTAS.TURNO "
                + " WHERE IDESTADO = '1' AND "
                + " IDAÑO = '" + año + "' AND  IDUNIDADEJECUTORA = '" + uejecutora + "' AND IDCORTE = '" + corte + "' ";
             

        List<Object[]> list = combo(sql);
        return list;
    }

    public List<Object[]> horariosCbo() {
        String sql = "SELECT "
                + "IDHORARIO,"
                + "DESCRIPCIONHORARIO "
                + "FROM BDTAS.HORARIO "
                + "where IDESTADO='1'";

        List<Object[]> list = combo(sql);
        return list;
    }

    public List<Object[]> horariosTipoCbo() {
        String sql = "SELECT "
                + "IDTIPOHORARIO,"
                + "DESCRIPCIONTIPOHORARIO "
                + "FROM BDTAS.HORARIOTIPO  "
                + "where IDESTADO='1'";

        List<Object[]> list = combo(sql);
        return list;
    }

    public List<Object[]> periodosCbo() {
        String sql = "SELECT DISTINCT TO_CHAR(IDFECHA, 'YYYYMM') CODPERIODO "
                + ",  TO_CHAR(IDFECHA, 'MM/YYYY') DESPERIODO "
                + "FROM BDTAS.FECHA  "
                +" WHERE TO_CHAR(IDFECHA, 'DDMMYYYY' ) <= (SELECT TO_CHAR(SYSDATE, 'DDMMYYYY' ) FROM DUAL) "
                + "ORDER BY 1";

        List<Object[]> list = combo(sql);
        return list;
    }

    public List<Object[]> ausentismoTipoCbo() {
        String sql = "SELECT "
                + "IDAUSENTISMOTIPO,"
                + "DESCRIPCIONAUSENTISMOTIPO "
                + "FROM BDTAS.AUSENTISMOTIPO "
                + "where IDESTADO='1'";

        List<Object[]> list = combo(sql);
        return list;
    }

    public List<Object[]> ausentismoModalidadCbo() {
        String sql = "SELECT "
                + "IDAUSENTISMOMODALIDAD,"
                + "DESCRIPCIONAUSENTISMOMODALIDAD "
                + "FROM BDTAS.AUSENTISMOMODALIDAD "
                + "where IDESTADO='1'";

        List<Object[]> list = combo(sql);
        return list;
    }

    public List<Object[]> conceptoDeAusentismo() {
        String sql = "SELECT "
                + "TO_CHAR(IDAUSENTISMOCONCEPTO) || '-' || TO_CHAR(IDAUSENTISMOMODALIDAD) || '-' || TO_CHAR(IDAUSENTISMOTIPO) || '-' || TO_CHAR(IDUNIDADAUSENTISMO),"
                + "DESCRIPCIONAUSENTISMOCONCEPTO DESCRIPCION "
                + "FROM BDTAS.AUSENTISMOCONCEPTO "
                + "where IDESTADO='1' AND IDUNIDADAUSENTISMO = 2";

        List<Object[]> list = combo2(sql);
        return list;
    }
    
     public List<Object[]> unidadAusentismo() {
        String sql = "SELECT "
                + "IDUNIDADAUSENTISMO,"
                + "DESCRIPCIONUNIDADAUSENTISMO "
                + "FROM BDTAS.AUSENTISMOUNIDAD "
                + "WHERE IDESTADO='1'";

        List<Object[]> list = combo(sql);
        return list;
    }
    
    public List<Object[]> estadosAprobSolAus() {
        String sql = "SELECT "
                + "IDESTADOSOLAUS,"
                + "DESCRIPCIONESTADOSOLAUS "
                + "FROM BDTAS.SOLICITUDAUSENTISMOESTADO  "
                + "WHERE IDESTADOSOLAUS IN (2,3)";

        List<Object[]> list = combo(sql);
        return list;
    }
    
     public List<Object[]> tipoNoLaborable() {
        String sql = "SELECT IDDIANOLABORABLETIPO CODIGO,"
                + "DESCRIPCION "
                + "FROM BDTAS.DIANOLABORABLETIPO "
                + "WHERE IDESTADO='1'";

        List<Object[]> list = combo(sql);
        return list;
    }
    
       public List<Object[]> estadosTrab() {
        String sql = "SELECT IDESTADO, DESCRIPCIONESTADO "
                + "FROM BDTAS.ESTADO";

        List<Object[]> list = combo(sql);
        return list;
    }
    
    public List<Object[]> exoneracion() {
        String sql = "SELECT IDFLAGEXOMARCA, DESCRIPCION FROM "
                + "BDTAS.FLAGEXONERAMARCACION";

        List<Object[]> list = combo(sql);
        return list;
    }
    
        public List<Object[]> estaten() {
        String sql = "SELECT 1 CODIGO, 'Pendiente' DESCRIPCION FROM dual " 
                + " UNION "
                + "SELECT 2 CODIGO, 'Atendidos' DESCRIPCION FROM dual ";

        List<Object[]> list = combo(sql);
        return list;
    }
     
     
    // apoyo
    private List<Object[]> combo(String sql) {
        List<Object[]> list = null;
        ConectaDb db = new ConectaDb();
        Connection cn = db.getBdtas();

        if (cn != null) {
            try {
                PreparedStatement ps = cn.prepareStatement(sql);
                ResultSet rs = ps.executeQuery();

                list = new LinkedList<Object[]>();
                while (rs.next()) {
                    Object[] fil = new Object[2];

                    fil[0] = rs.getInt(1);
                    fil[1] = rs.getString(2);

                    list.add(fil);
                }
            } catch (SQLException e) {
            } finally {
                try {
                    cn.close();
                } catch (SQLException e) {
                }
            }
        }

        return list;
    }

    private List<Object[]> combo2(String sql) {
        List<Object[]> list = null;
        ConectaDb db = new ConectaDb();
        Connection cn = db.getBdtas();

        if (cn != null) {
            try {
                PreparedStatement ps = cn.prepareStatement(sql);
                ResultSet rs = ps.executeQuery();

                list = new LinkedList<Object[]>();
                while (rs.next()) {
                    Object[] fil = new Object[2];

                    fil[0] = rs.getObject(1);
                    fil[1] = rs.getObject(2);

                    list.add(fil);
                }
            } catch (SQLException e) {
            } finally {
                try {
                    cn.close();
                } catch (SQLException e) {
                }
            }
        }

        return list;
    }
    
    private List<Object[]> comboAdminpj(String sql) {
        List<Object[]> list = null;
        ConectaDb db = new ConectaDb();
        Connection cn = db.getBdtas();

        if (cn != null) {
            try {
                PreparedStatement ps = cn.prepareStatement(sql);
                ResultSet rs = ps.executeQuery();

                list = new LinkedList<Object[]>();
                while (rs.next()) {
                    Object[] fil = new Object[2];

                    fil[0] = rs.getInt(1);
                    fil[1] = rs.getString(2);

                    list.add(fil);
                }
            } catch (SQLException e) {
            } finally {
                try {
                    cn.close();
                } catch (SQLException e) {
                }
            }
        }

        return list;
    }

     private List<Object[]> comboAdminpjSTR(String sql) {
        List<Object[]> list = null;
        ConectaDb db = new ConectaDb();
        Connection cn = db.getBdtas();

        if (cn != null) {
            try {
                PreparedStatement ps = cn.prepareStatement(sql);
                ResultSet rs = ps.executeQuery();

                list = new LinkedList<Object[]>();
                while (rs.next()) {
                    Object[] fil = new Object[2];

                    fil[0] = rs.getString(1);
                    fil[1] = rs.getString(2);

                    list.add(fil);
                }
            } catch (SQLException e) {
            } finally {
                try {
                    cn.close();
                } catch (SQLException e) {
                }
            }
        }

        return list;
    }
    private Integer numeroRegistrosTAS(String sql) {
        Integer numeroRegistros = 0;
        ConectaDb db = new ConectaDb();
        Connection cn = db.getBdtas();

        if (cn != null) {
            try {
                PreparedStatement ps = cn.prepareStatement(sql);

                ResultSet rs = ps.executeQuery();

                if (rs.next()) {
                    int ctos = rs.getInt(1);
                    numeroRegistros = ctos;
                }
            } catch (SQLException e) {
            } finally {
                try {
                    cn.close();
                } catch (SQLException e) {
                }
            }
        }

        return numeroRegistros;
    }

}
